home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / www / ludzie / txf / progs / fastvbr.lha / FastVBR / FastVBR.asm < prev    next >
Assembly Source File  |  1996-01-04  |  3KB  |  174 lines

  1.  
  2.  
  3. ;Based on FastVBR 2.0 by Michaî i Piotr Kolodziejczykowie.
  4. ;V2.1 (by Tadek Knapik) new features:
  5. ; - more sophisticated processor checking
  6. ; - error code 5 is returned if sth is wrong (and not 20!)
  7. ;
  8. ;V2.2 new features:
  9. ; - 'Chip' option - bring VBR back to Chip RAM at $00000000!
  10. ;   ("chip" or "slow" in the command line)
  11. ; - 'eXchange' option - switches VBR chip/fast every time ran.
  12. ;   ("x" in the command line). No memory freeing!
  13. ;
  14. ;V2.3 new features:
  15. ; - memory freeing when capitalized letter (S, C, X)
  16. ;
  17. ;V2.4 new features:
  18. ; - Can be run from Workbench
  19. ;
  20. ;V2.5
  21. ; - bug removed (freeing when old vectors were at $00000000)
  22. ;
  23. ;----------
  24. ; - chip at $00000000 isn't allocated of course
  25. ; - fast is freed with FreeMem, not FreeVec (because FastVBR does AllocMem)
  26. ;
  27. ;
  28.  
  29.     incdir    Includes:
  30.     include    exec/execbase.i
  31.     include    exec/memory.i
  32.     include    libraries/dosextens.i
  33.     include    offsets/exec_lib.i
  34.  
  35. VECTABLE_SIZE    equ    512
  36.  
  37. Begin:
  38.     bra    Start
  39.  
  40.     dc.b    '$VER: FastVBR v2.5 (07.07.96)',0
  41.  
  42. Start:
  43.     move.l    $4,a6
  44.     move.l    a0,a4
  45.     move.l    #0,d5
  46.  
  47.     sub.l    a1,a1
  48.     jsr    _LVOFindTask(a6)
  49.     move.l    d0,a0
  50.     tst.l    pr_CLI(a0)
  51.     bne    CLIStuff
  52.     lea    pr_MsgPort(a0),a0
  53.     move.l    a0,a2
  54.     jsr    _LVOWaitPort(a6)
  55.     move.l    a2,a0
  56.     jsr    _LVOGetMsg(a6)
  57.     move.l    d0,d5
  58.  
  59. CLIStuff:
  60.     moveq    #0,d0
  61.     move.w    AttnFlags(a6),d0
  62.     andi.w    #AFF_68010!AFF_68020!AFF_68030!AFF_68040!AFF_68060,d0
  63.     beq    Error
  64.  
  65.     cmpi.b    #'?',(a4)
  66.     beq    Quit
  67.  
  68.     lea    GetVBR(pc),a5
  69.     jsr    _LVOSupervisor(a6)
  70.  
  71.     move.l    d0,d6
  72.     moveq    #0,d7
  73.  
  74.     cmpi.b    #'C',(a4)
  75.     beq    SlowForce
  76.     cmpi.b    #'c',(a4)
  77.     beq    Slow
  78.     cmpi.b    #'S',(a4)
  79.     beq    SlowForce
  80.     cmpi.b    #'s',(a4)
  81.     beq    Slow
  82.  
  83.     cmpi.b    #'X',(a4)
  84.     beq    SwitchForce
  85.     cmpi.b    #'x',(a4)
  86.     beq    Switch
  87.  
  88.     bra    Fast
  89.  
  90. SwitchForce:
  91.     moveq    #1,d7
  92. Switch:
  93.     tst.l    d0
  94.     bne    Slow
  95.  
  96. Fast:
  97.     tst.l    d0
  98.     bne    Quit
  99.     
  100.  
  101.     move.l    #VECTABLE_SIZE,d0
  102.     move.l    #MEMF_PUBLIC!MEMF_FAST,d1
  103.     jsr    _LVOAllocMem(a6)
  104.     move.l    d0,d2
  105.     beq    Error
  106.  
  107.     move.l    d0,a1
  108.     sub.l    a0,a0
  109.     bra    CopyVectors
  110.  
  111. SlowForce:
  112.     moveq    #1,d7
  113. Slow:
  114.     tst.l    d0
  115.     beq    Quit
  116.  
  117.     move.l    d0,a0
  118.     sub.l    a1,a1
  119.     moveq    #0,d2
  120.  
  121. CopyVectors:
  122.  
  123.     jsr    _LVOForbid(a6)
  124.  
  125.     move.l    #VECTABLE_SIZE,d0
  126.     jsr    _LVOCopyMemQuick(a6)
  127.  
  128.     move.l    d2,d0
  129.     lea    SetVBR(pc),a5
  130.     jsr    _LVOSupervisor(a6)
  131.  
  132.     tst.l    d7
  133.     beq    Quit
  134.  
  135.     tst.l    d6
  136.     beq    Quit
  137.  
  138.     jsr    _LVOPermit(a6)
  139.     move.l    d6,a1
  140.     move.l    #VECTABLE_SIZE,d0
  141.     jsr    _LVOFreeMem(a6)
  142.     jsr    _LVOForbid(a6)
  143.  
  144. Quit:
  145.     tst.l    d5
  146.     beq    QuitNow
  147.  
  148.     move.l    d5,a1
  149.     jsr    _LVOReplyMsg(a6)
  150.  
  151. QuitNow:
  152.     moveq    #0,d0
  153.     rts
  154.  
  155. Error:
  156.     tst.l    d5
  157.     beq    ErrorNow
  158.  
  159.     move.l    d5,a1
  160.     jsr    _LVOReplyMsg(a6)
  161.  
  162. ErrorNow:
  163.     moveq    #5,d0
  164.     rts
  165.  
  166. GetVBR:
  167.     movec    VBR,d0
  168.     rte
  169.  
  170. SetVBR:
  171.     movec    d0,VBR
  172.     rte
  173.  
  174.